#ifndef TASK_HPP
#define TASK_HPP
#include <queue>
#include <mutex>
#include <string>
#include <shared_mutex>

// template<typename T>
typedef void* (*tfunction)(void*);

// template<class T,class F>
// struct FunT{
//     typedef T (*function)(F);
//     function fun;
// };

// template<class T,class F>
/* 任务个体 */
struct _Task{
    tfunction fun;
    void* data;
    _Task(tfunction f,void* arg):fun(f),data(arg){}
};


/* 任务队列 */
class _Tasks{
private:
    std::queue<_Task*> taskq;   // 任务队列
    int task_task;     // 任务数量
    std::mutex mtx;  // 互斥量
public:
    _Task* getTasks();
    void addTasks(_Task* t);
    int getSize();
};


// FunT<int> cc;

#endif